package com.example.ldachu.testdownload.http.base;

import com.example.ldachu.testdownload.http.util.AESOperator;
import com.example.ldachu.testdownload.http.util.EncryptUtils;
import com.example.ldachu.testdownload.http.util.GsonUtil;
import com.example.ldachu.testdownload.http.util.SortMapUtil;

import java.util.Map;

/**
 * @author zxKueen on 2017-12-22 10:13
 *         Email: 4994766@qq.com
 */

public class BaseRequest {

    /**
     * 与服务器进行校验的Key
     **/
    public static String KEY = "7e707037-07b3-4e10-8e83-73bf078df4b2";
    public static String KEY2 = "8e808087-08b3-3e10-8e83-93bf078df4b2";

    /**
     * 签名的key
     */
    public final static String PARAM_Sign = "Sign";

    /**
     * 平台
     */
    public String Platform = "1";
    /**
     * 签名
     */
    public String Sign;
    /**
     * 终端
     */
    public String Terminal = "4";
    /**
     * ip地址
     */
    public String UserIP = "0.0.0.0";
    /**
     * 登录token
     */
    public String UserToken;
    /**
     * App版本
     */
    public String Version = "1.4.2";




    /**
     * 获取请求参数加密后的字符串
     * 通过AES将拼接后的字符串进行加密
     *
     */
    public String getRequest(){
        Map<String, String> map = getMap();
        String json = GsonUtil.toString(map);
        String request = "";
        try {
             request = AESOperator.getInstance().encrypt(json);
        } catch (Exception e) {
            e.printStackTrace();
        }

        return request;
    }
    /**
     * 将对象转为json字符串
     * @return
     */
    @Override
    public String toString() {
        return GsonUtil.toString(this);
    }


    /**
     * 获取请求参数的map
     * @return
     */
    public Map<String ,String > getMap(){
        Map<String ,String> map = GsonUtil.GsonToMaps(this.toString());
        map.remove(PARAM_Sign);

        /**
         * 签名加密方式：
         * 通过将map按键的升序，然后遍历map，将值组装成一个字符串，然后再加一个跟服务器
         * 约定好的字符串KEY，再把这个字符串MD5加密
         */
        map.put(PARAM_Sign, EncryptUtils.encryptMD5ToString(SortMapUtil.getChkValue2(map)));
        return map;
    }
}
